/**
 * @ProjectName: go-learn-demo
 * @PackageName: ginybxb
 * @Description: 响应各种类型的结果：string，json等
 * @Author: hy.bai
 * @Date: 2025-08-03 8:55
 */
package ginybxb

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func TestRespString() {

	// 1.初始化gin对象
	r := gin.Default()

	// 2.注册请求
	r.GET("/hello", func(context *gin.Context) {
		fmt.Println("处理hello请求...")
		// 响应字符串
		context.String(http.StatusOK, "你好~, Golang")
	})

	// 3.启动服务
	err := r.Run(":8080")
	if err != nil {
		fmt.Println("服务启动失败")
		return
	}
	fmt.Println("服务启动成功,访问地址是:http://127.0.0.1:8080")
}

// 响应json
func TestRespJson() {

	// 1.实例化gin实例
	r := gin.Default()

	// 2.注册请求
	r.GET("/hello", func(context *gin.Context) {
		// 方式1:初始化结构体，进行响应
		//data := new(struct {
		//	Msg  string
		//	Code int
		//})
		//data.Msg = "你好~, Golang"
		//data.Code = 200
		// 返回JSON格式的数据
		//context.JSON(http.StatusOK, data) // 表示响应内容是一个json

		// 方式2:直接使用gin.H返回json数据
		// gin.H是一个Map(type H map[string]any),key是字符串，而value可以是任意类型(type any = interface{})
		context.JSON(http.StatusOK, gin.H{
			"code": 200,           // 业务状态码。
			"msg":  "你好~, Golang", // 请求成功或报错信息
			"data": nil,           // 返回的数据
		})
	})
	// 3.启动服务
	fmt.Println("服务访问地址是:http://127.0.0.1:8080")
	r.Run(":8080")
}

// 测试重定向
func TestRedirect() {

	// 1.实例化gin对象
	r := gin.Default()

	// 2.注册服务
	r.GET("/hello", func(context *gin.Context) {
		// 把请求重定向到百度
		context.Redirect(http.StatusMovedPermanently, "https://www.baidu.com/")
	})

	// 3.启动服务
	r.Run(":8080")
}
